﻿// test_multi_file.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include "base16.h"
#include <string>
#include <vector>
using namespace std;

int main()
{

    {
        string teststr{ "测试base16数据" };
        vector<unsigned char> data(
            teststr.data(),
            teststr.data() + teststr.size() + 1
        );
        auto base16str = Base16Encode(data);
        cout << "src: " << teststr << endl;
        cout << "base16 encode: " << base16str << endl;


        auto resdata = Base16Decode(base16str);
        cout << "base16 decode : ";
        for (auto c : resdata)
            cout << c;

        
    }

    const char* cstr{"测试const char *到vector"};
    int size = strlen(cstr);

    //cout << "strlen = " << size << endl;
    //cstr+size \0位置
    //end 最后一位数据的下一位，
    //比如最后一个字符地址1000，end存的是1008
    //vector<unsigned char> data(cstr, cstr + size + 1);
    //cout << data.data() << endl;
    //cout << "data.size() = " << data.size() << endl;

    vector<unsigned char> data{};
    char astr[]{ "测试数组到vector" };
    data.clear();
    data.assign(astr, astr + sizeof(astr));
    //cout << data.data() << endl;
    //cout << sizeof(astr) << ":" << data.size() << endl;

    string str{ "测试string到vector" };
    data.clear(); //清理空间标识，不一定释放空间
    data.assign(str.begin(), str.end());
    data.push_back('\0');
    //cout << data.data() << endl;
    //cout << str.size() << ":" << data.size() << endl;

    data.clear(); //清理空间标识，不一定释放空间
    data.assign(str.data(), (str.data() + str.size() + 1));
    //cout << data.data() << endl;
    //cout << str.size() << ":" << data.size() << endl;

    // vector转string
    string outstr(data.begin(), data.end()); //多了一个\0
    //cout << "str.size() = " << str.size() << endl;
    //cout << outstr << endl;
    //cout << outstr.size() << endl;


    //gcount++;
    //cout << "gcount = " << gcount << endl;
    //TestFunc(1, 2);
    //TestC();
    //TestFunc1();
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件，或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来，若要再次打开此项目，请转到“文件”>“打开”>“项目”并选择 .sln 文件
